#ifndef _KEY_CONVERSION_H_
#define _KEY_CONVERSION_H_

#include "rfid_board.h"

#if _RFID_FUNCTION_ENABLE_

// 密钥填充字长度
#define RFID_NUMBER_OF_KEY_FILL_WPRD                     (10ul)
// 卡号填充字长度
#define RFID_NUMBER_OF_CARD_SERIAL_NUMBER_FILL_WPRD      (12ul)

// 密钥填充字 - 杨格
#define RFID_KEY_FILL_WPRD_YG                            (uint8_t[]){"T0eqkcQLjf"}

// 密钥填充字 - 华住
#define RFID_KEY_FILL_WPRD_HZ                            (uint8_t[]){"Ug2Zgdd7EP"}
// 卡号填充字 - 华住
#define RFID_CARD_SERIAL_NUMBER_FILL_WPRD_HZ             (uint8_t[]){"5N6KdxCdpAQi"}

// 密钥填充字 - 应急
#define RFID_KEY_FILL_WPRD_YJ                            (uint8_t[]){"nX5jN4gO4kI1zG6w"}

// 配置卡密钥
#define CONFIG_CARD_KEY {0x6F, 0x69, 0x46, 0x5F, 0x71, 0x25}

/**
 * @brief 梯控计算访问密钥
 * 
 * @param pCardSn      - 卡号
 * @param pKeyValue    - 访问密钥
 * @param pKeyValueOut - 计算后的密钥
 * @param CardProtocol - 卡片协议
 * @return bool        - 运行状态（true：成功 false：失败）
 */
extern bool ElevatorCalculatingAccessKeyA(uint8_t *pCardSn, uint8_t *pKeyValue, uint8_t *pKeyValueOut, uint8_t CardProtocol);

/**
 * @brief 门锁计算访问密钥
 * 
 * @param pCardSn      - 卡号
 * @param pKeyValue    - 访问密钥
 * @param pKeyValueOut - 计算后的密钥
 * @param CardProtocol - 卡片协议
 * @return bool        - 运行状态（true：成功 false：失败）
 */
extern bool DoorLockCalculatingAccessKeyA(uint8_t *pCardSn, uint8_t *pKeyValue, uint8_t *pKeyValueOut, uint8_t CardProtocol);

/**
 * @brief 计算访问密钥B
 * 
 * @param pKeyValue    - 访问密钥
 * @param pKeyValueOut - 计算后的密钥
 * @return bool        - 运行状态（true：成功 false：失败）
 */
extern bool CalculatingAccessKeyB(uint8_t *pKeyValue, uint8_t *pKeyValueOut);

/**
 * @brief 计算访问密钥C
 * 
 * @param pCardSn      - 卡号
 * @param pKeyValueOut - 计算后的密钥
 * @return bool        - 运行状态（true：成功 false：失败）
 */
extern bool CalculatingAccessKeyC(uint8_t *pCardSn, uint8_t *pKeyValueOut);

#endif
#endif
